package com.sdry.mapper.jyy;
import java.util.List;
import java.util.Map;

import javax.servlet.http.HttpSession;

import com.sdry.model.jyy.ReceiveDetail;

import org.apache.ibatis.annotations.Param;

import com.sdry.model.jyy.Receive;
import com.sdry.model.jyy.Up;
import com.sdry.model.llm.LlmRegionStock;
import com.sdry.model.llm.LlmWarehouseStock;
import com.sdry.model.lz.Customer;
import com.sdry.model.lz.LzQueryCriteria;
import com.sdry.model.lz.Materiel;
import com.sdry.model.lz.WarehouseRegionLocation;
import com.sdry.model.zc.ZcMaterielAndTrayEntity;
import com.sdry.model.zc.ZcTrayAndLocationEntity;
/**
 *
 *@ClassName: ReceiveService
 *@Description: 收货计划
 *@Author jyy
 *@Date 2019-04-18 09:35:01
 *@version 1.0
*/
public interface ReceiveMapper {
	/** 
	 * 根据主键id查询实体
	 * @param id 主键id
	 * @return 实体
	*/
	public Receive queryById(Long id);
	/** 
	 * 条件查询所有
	 * @param param 实体条件
	 * @return 实体集合
	*/
	public List<Receive> queryAllByMution(Receive param);
	
	
	/** 
	 * 条件分页查询
	 * @param param 实体条件
	 * @return 实体集合
	*/
	public List<Receive> findPageByMution(Receive param);
	
	/** 
	 * 条件分页查询发货退回
	 * @param param 实体条件
	 * @return 实体集合
	*/
	List<Receive> findPageByMutionReturn(Receive param);
	
	/** 
	 * 条件查询记录数
	 * @param param 实体条件
	 * @return 实体集合
	*/
	public Integer selectCountByMution(Receive param);
	
	/** 
	 * 条件查询记录数
	 * @param param 实体条件
	 * @return 实体集合
	*/
	public Integer selectCountByMutionReturn(Receive param);
	
	/** 
	 * 插入返回id
	 * @param param 实体条件
	 * @return 主键id
	*/
	public Long insert(Receive param);
	
	/** 
	 * 条码入库的发货退回
	 * @param param 实体条件
	 * @return 主键id
	*/
	Long insert_return(Receive param);
	
	/** 
	 * 根据主键更新 返回影响行数
	 * @param param 实体条件
	 * @return 影响行数
	*/
	public Integer update(Receive param);
	/** 
	 * 根据主键拼接的字符串删除返回影响行数
	 * @param ids 主键拼接的字符串
	 * @return 影响行数
	*/
	public Integer delete(String ids);
	
	/**
	 * 根据物料产品码查询物料所有信息
	 * @param maNum 物料产品码
	 * @return
	 */
	public Materiel selectMaByMaNum(String maNum);
	
	/**
	 * 根据物料id 和  供应商名称查询物料的仓库信息
	 * @param mid 物料id
	 * @return
	 */
	public List<LlmWarehouseStock> selectWarehouseByMid(Up up);
	/**
	 * 根据物料id和仓库id查询库区信息
	 * @param ws
	 * @return
	 */
	public List<LlmRegionStock> selectRegionStockByWarehouseId(LlmWarehouseStock ws);
	/**
	 * 根据物料id和库区id查询库位信息
	 * @param rs
	 * @return
	 */
	public List<WarehouseRegionLocation> selectLocationStockByRegionId(LlmRegionStock rs);
	
	/**
	 * 根据供应商 名称 查询相关物料信息
	 * @param client
	 * @return
	 */
	public List<Materiel> materielList(Long id);
	/**
	 * 根据物料id查询供应商
	 */
	public List<Customer> selectCustomerByMid(Long id);
	
	/**
	 * 根据物料id查询库区位置
	 * @param mid 物料id
	 * @return
	 */
	public Materiel queryMaterielLocationById(Long mid);
	
	/**   
	 * 根据条件查询物料 
	 * @param materiel 物料实体
	 * @return             
	 */
	public List<Materiel> queryAllMaterielByParam(Materiel materiel);
	/**
	 * 根据条件查询单据（不区分发货单，精简发货）
	 * @param receive
	 * @return
	 */
	public List<Receive> allByMution(Receive receive);
	
    public int restor(Map map);
	
	public int cacel(Map map);
	/**
	 * 根据id条件查询收货数量
	 * @param receive
	 * @return
	 */
	public int  queryCodeNumByid(int id);
	
	public List<Receive> queryAllByMution1(Receive param);
	
	public Integer selectCountByMution1(Receive param);

	public List<Receive> queryAllByMution11(Receive param);
	
	public Integer selectCountByMution11(Receive param);
	
	/**
     * 单据合并
     * @param mergeFlag 单据合并标志
     * @param ids 逗号拼接的收货单id
     * @return
     */
	Integer mergeDetail(@Param("mergeFlag")String mergeFlag, @Param("receiveNumber")String receiveNumber);
	
	/**
	 * 多条件分页查询收货单：条码
	 * @param criteria
	 * @return
	 */
	List<Receive> queryReceiveCriteria(LzQueryCriteria criteria);
	
	/**
	 * 多条件分页查询收货单条数：条码
	 * @param criteria
	 * @return
	 */
	Integer countReceiveCriteria(LzQueryCriteria criteria);
	
	/**
	 * 多条件分页查询收货单：精简
	 * @param criteria
	 * @return
	 */
	List<Receive> queryReceiveCriteriaSingle(LzQueryCriteria criteria);
	
	/**
	 * 多条件分页查询收货单条数：精简
	 * @param criteria
	 * @return
	 */
	Integer countReceiveCriteriaSingle(LzQueryCriteria criteria);
	
	/**
	 * 根据条码先查询ReceiveMark中是否存在
	 * @param code
	 * @return
	 */
	String queryCodeMarkExist(String code);
	
	/**
	 * 收货到待检区
	 * @param zcMaterielAndTrayEntity
	 * @return
	 */
	Integer insertInspectionArea(
			ZcMaterielAndTrayEntity zcMaterielAndTrayEntity);
	
	/**
	 * 先查询托盘库位表是否存在待检区
	 * @param warehouse_id
	 * @return
	 */
	ZcTrayAndLocationEntity queryExistDJ(Long warehouse_id);
	
	/**
	 * 库位托盘表新增信息
	 * @param zcTrayAndLocationEntity
	 * @return
	 */
	Integer insertTrayLocation(
			ZcTrayAndLocationEntity zcTrayAndLocationEntity);
	
	/**
	 * 库位托盘表修改
	 * @param zcTrayAndLocationEntity
	 * @return
	 */
	Integer updateTrayLocation(
			ZcTrayAndLocationEntity zcTrayAndLocationEntity);

    /**
     * 分页查询物料信息
     * @param criteria
     * @return
     */
    List<Materiel> queryMaterielCriteriaByCondition(LzQueryCriteria criteria);

    /**
     * 分页查询物料条数
     * @param criteria
     * @return
     */
    Integer countMaterielCriteriaByCondition(LzQueryCriteria criteria);

    /**
     * 更改收货单状态为已收货
     * @param receive
     */
    void updateReceive(Receive receive);

    /**
     * APP查询所有未收货的收货单
     * @param warehouse_id 仓库id
     * @param isSimple 0：条码收货 1：精简收货 2：批量收货
     */
    List<Receive> selectAllReceive(@Param("warehouse_id") String warehouse_id, @Param("isSimple") String isSimple);

    /**
     * 根据收货单id查询收货单
     * @param receiveId
     * @return
     */
    Receive queryReceiveById(String receiveId);

    /**
     * 根据单据合并标识修改单据状态
     * @param merge_flag
     * @param submitStatus
     */
    void updateReceiveSubmitStatusByMergeFlag(@Param("merge_flag") String merge_flag, @Param("submitStatus") String submitStatus);
    
    /**
     * 根据收货单号查询收货单
     * @param receiveNumber
     * @return
     */
	List<Receive> queryReceiveByReceiveNumber(String receiveNumber);
	
	/**
	 * 修改合并的其它收货单状态
	 * @param merge_flag
	 */
	void updateReceiveByMergeFlag(String merge_flag);
}
